import router from '@/router'
import store from './store'

import NProgress from 'nprogress' // 引入一份进度条插件
import 'nprogress/nprogress.css' // 引入进度条样式
// permission.js文件说明:
// 权限 这个文件是用来进行登录拦截控制
// 后台管理系统,如果用户没登录,登录可以看,404也可以看,其他的页面不给看
// 页面访问权限来说,取决于用户登录没登陆
// 思路:
// 判断用户是否登录,=>token
// 白名单是个数组,里面放的是不做任何限制的页面的路由地址(随意取得页面路径不多)
const WHITE_LIST = ['/login', '/404']
// console.log(WHITE_LIST)

// 1.有token,
//   如果你还要去/login,引导到首页
//   如果取得不是/login,直接去
// 2.没有token,
//   此时访问的是白名单的路径,直接去,
//   此时如果你非要去白名单以外的路径,拦截走登录
// 移动端来说,如果用户不登陆的话,也是能看一些页面的

// 配置了路由前置守卫
// 在路由前置守卫中,一旦要放行  无论如何都需要调用next()
// next  放行函数 一定要调用
// to   去哪     是一个对象,放了所有你要去的路由信息
// from  来自哪      是一个对象,放了所有你来的路由信息
router.beforeEach(async(to, from, next) => {
//   console.log(to, from, 3333333333)
  NProgress.start()
  const token = store.getters.token
  if (token) {
    // 有token
    if (to.path === '/login') {
      // 要去登录 引导
      next('/')
      NProgress.done()
    } else {
      if (!store.state.user.userInfo.userId) {
        const res = await store.dispatch('user/getUserInfo')
        console.log('用户基本信息', res)
      }

      next()
    }
  } else {
    // 没有token
    if (WHITE_LIST.includes(to.path)) {
      next()
    } else {
      next('/login')
      NProgress.done()
    }
  }
})

router.afterEach((to, from) => {
  // 这里就是在配置后置守卫代码,
  // 页面组件只要进入展示之后,就会立马触发后置守卫,执行里面的逻辑,关闭进度条
  NProgress.done()
})
